package com.sybil.ot.dominio;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Embeddable
public class EventoPK implements Serializable {

   private String claveFlujo;
   private String clavePaso;
   private String claveEvento;

   public EventoPK() {
   }

   public EventoPK(String claveFlujo, String clavePaso, String claveEvento) {
      this.claveFlujo = claveFlujo;
      this.clavePaso = clavePaso;
      this.claveEvento = claveEvento;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 4)
   @Column(name = "EVFL_FLUJ_CLAVE")
   public String getClaveFlujo() {
      return claveFlujo;
   }

   public void setClaveFlujo(String claveFlujo) {
      this.claveFlujo = claveFlujo;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 4)
   @Column(name = "EVFL_PAFL_ORIGEN")
   public String getClavePaso() {
      return clavePaso;
   }

   public void setClavePaso(String clavePaso) {
      this.clavePaso = clavePaso;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 4, message = "La Clave debe tener entre 1 y 4 caracteres")
   @Pattern(regexp = "^[a-zA-Z0-9_]*$", message = "Sólo se aceptan letras, números y '_'")
   @Column(name = "EVFL_CLAVE")
   public String getClaveEvento() {
      return claveEvento;
   }

   public void setClaveEvento(String claveEvento) {
      this.claveEvento = claveEvento;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (claveFlujo != null ? claveFlujo.hashCode() : 0);
      hash += (clavePaso != null ? clavePaso.hashCode() : 0);
      hash += (claveEvento != null ? claveEvento.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof EventoPK)) {
         return false;
      }
      EventoPK other = (EventoPK) object;
      if ((this.claveFlujo == null && other.claveFlujo != null) || (this.claveFlujo != null && !this.claveFlujo.equals(other.claveFlujo))) {
         return false;
      }
      if ((this.clavePaso == null && other.clavePaso != null) || (this.clavePaso != null && !this.clavePaso.equals(other.clavePaso))) {
         return false;
      }
      if ((this.claveEvento == null && other.claveEvento != null) || (this.claveEvento != null && !this.claveEvento.equals(other.claveEvento))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "EventoPK[ claveFlujo=" + claveFlujo + ", clavePaso=" + clavePaso + ", claveEvento=" + claveEvento + " ]";
   }
}
